﻿

#ifndef __DEBUG_INCLUDED_H_
#define __DEBUG_INCLUDED_H_
////////////////////////////////////////////////////////////////////////////////
#include <asio++/configure.h>
////////////////////////////////////////////////////////////////////////////////
#define PRINT(f, ...) {printf(f, ##__VA_ARGS__); fflush(stdout);}
#ifndef TRACE
#ifdef _DEBUG
#define TRACE(f, ...) {printf(f, ##__VA_ARGS__); fflush(stdout);}
#else
#define TRACE(f, ...) void(0)
#endif
#endif
////////////////////////////////////////////////////////////////////////////////
namespace console{
////////////////////////////////////////////////////////////////////////////////
#if defined(OS_WINDOWS)
inline void log(const char *format, ...){
#if defined(_DEBUG)
    char buffer[1024];
    char *info = buffer;
    va_list args;
    va_start(args, format);
    size_t bytes = _vscprintf(format, args) + 1;
    if (bytes > sizeof(buffer)){
        info = (char*)malloc(bytes);
    }
    if (info){
        vsprintf(info, format, args);
        va_end(args);
        OutputDebugStringA(info);
        if (info != buffer) free(info);
    }
#endif
}
#else
inline void log(const char *format, ...){}
#endif
////////////////////////////////////////////////////////////////////////////////
} //End of namespace console.
////////////////////////////////////////////////////////////////////////////////
#endif //__DEBUG_INCLUDED_H_
